home *** CD-ROM | disk | FTP | other *** search
/ Oh!X 2001 Spring / Oh!X 2001 Spring Special CD-ROM (Japan).7z / Oh!X 2001 Spring Special CD-ROM (Japan) (Track 1).bin / GALAXY / ohx5-1 / control.cpp < prev    next >
C/C++ Source or Header  |  2001-01-10  |  2KB  |  81 lines

  1. /*
  2.     OH!X5号
  3.     GalaxyKnightsサンプル1
  4.     制御入力部分
  5.     アクションマッピング非対応版
  6. */
  7.  
  8. /*    ヘッダーインクルード    */
  9.  
  10. #include    "stdafx.h"
  11. #include    "ohx5_1.h"
  12. #include    <dinput.h>
  13.  
  14. LPDIRECTINPUT8            lpDI=NULL;    //    DirectInput8オブジェクト
  15. LPDIRECTINPUTDEVICE8    lpDID=NULL;    //    DirectInput8デバイスオブジェクト
  16.  
  17. //    Keyboard からの入力にDirectInput を初期化
  18.  
  19. bool    init_input()
  20. {
  21. HRESULT    hr;
  22. DIPROPDWORD dw;
  23. //    DIRECTINPUT7オブジェクト確保
  24.     hr = DirectInput8Create(hInstApp,DIRECTINPUT_VERSION,IID_IDirectInput8,(void **)&lpDI,NULL );
  25.     if( FAILED(hr) ) return false;
  26.  
  27. //    DirectX8デバイスオブジェクトを、キーボードに対して用意
  28.     hr = lpDI->CreateDevice( GUID_SysKeyboard,&lpDID,NULL );
  29.     if( FAILED(hr) ) return false;
  30.     hr = lpDID->SetDataFormat(&c_dfDIKeyboard );
  31.     if( FAILED(hr) ) return false;
  32.     hr = lpDID->SetCooperativeLevel( hwndApp,DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
  33.     if( FAILED(hr) ) return false;
  34.  
  35. // バッファ・サイズを設定
  36.     dw.diph.dwSize = sizeof(DIPROPDWORD); 
  37.     dw.diph.dwHeaderSize = sizeof(DIPROPHEADER); 
  38.     dw.diph.dwObj = 0;
  39.     dw.diph.dwHow = DIPH_DEVICE;
  40.     dw.dwData = sizeof(DIDEVICEOBJECTDATA) * 100;
  41.     lpDID->SetProperty(DIPROP_BUFFERSIZE, (LPCDIPROPHEADER)&dw);
  42.  
  43. // 入力制御開始
  44.     lpDID->Acquire();
  45.  
  46.     return true;
  47. }
  48.  
  49. //    入力キーコードから、ゲームの内部処理コードを生成
  50. //    何でわざわざそうするかというと、DirectInputを隠蔽するためと、
  51. //    入力装置がキーボード以外になってもここで差を吸収し、
  52. //    互換性を保つ事が出来るようにするため。
  53. WORD    GetKeys()
  54. {
  55. BYTE    keys[256];
  56. HRESULT    hr;
  57. WORD    ret;
  58.     ret = 0;
  59.     hr = lpDID->GetDeviceState(256,keys);
  60.     if( hr == DIERR_INPUTLOST ){
  61.         lpDID->Acquire();
  62.     } else {
  63.         if( keys[DIK_SPACE     ] & 0x80 ){ ret |= PAD_SHOOT;   }
  64.         if( keys[DIK_LSHIFT    ] & 0x80 ){ ret |= PAD_FORWARD; }
  65.         if( keys[DIK_LCONTROL  ] & 0x80 ){ ret |= PAD_CMD;     }
  66.         if( keys[DIK_Z         ] & 0x80 ){ ret |= PAD_LOCK;    }
  67.         if( keys[DIK_UPARROW   ] & 0x80 ){ ret |= PAD_UP;      }
  68.         if( keys[DIK_LEFTARROW ] & 0x80 ){ ret |= PAD_LEFT;    }
  69.         if( keys[DIK_RIGHTARROW] & 0x80 ){ ret |= PAD_RIGHT;   }
  70.         if( keys[DIK_DOWN      ] & 0x80 ){ ret |= PAD_DOWN;    }
  71.     }
  72.     return ret;
  73. }
  74.  
  75. //    DirectInput終了処理
  76. void    release_input()
  77. {
  78.     xRelease( lpDID );
  79.     xRelease( lpDI );
  80. }
  81.